﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using FastDATA;

namespace CursoUNICEUB
{
    public partial class GerenciarProjeto : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                if (Session["aluno"] == null)
                    Util.showMessage(this, "Somente usuários logados podem acompanhar o projeto.", "ConsultarProjetos.aspx");
                else
                {
                    carregarUsuarios();
                    carregarProjeto();
                }
            }
        }

        private void carregarProjeto()
        {
            if (Request.QueryString["codigo"] == null)
            {
                Util.showMessage(this, "Projeto não encontrado.", "ConsultarProjetos.aspx");
            }
            else
            {
                int codigo = int.Parse(Request.QueryString["codigo"]);

                using (DCCursoDataContext banco = new DCCursoDataContext())
                {
                    var query = from projeto in banco.DEProjetos
                                where projeto.Codigo == codigo
                                select projeto;

                    DEProjeto entidade = query.FirstOrDefault();
                    if (entidade == null)
                        Util.showMessage(this, "Projeto não encontrado.", "ConsultarProjetos.aspx");
                    else
                    {
                        lblNomeProjeto.Text = entidade.Nome;
                        lblPO.Text = entidade.DEProductOwner.Nome;
                        if (entidade.DEScrumMaster != null)
                            lblSM.Text = entidade.DEScrumMaster.Nome;
                        if (entidade.Inicio.HasValue)
                            lblInicio.Text = entidade.Inicio.Value.ToShortDateString();
                        else
                        {
                            hplIniciarProjeto.NavigateUrl = "~/IniciarProjeto.aspx?codigo=" + codigo;
                            hplIniciarProjeto.Visible = true;
                        }
                        if (entidade.Valor.HasValue)
                            lblValor.Text = entidade.Valor.Value.ToString();

                        if (entidade.DEVisaoProdutos == null || entidade.DEVisaoProdutos.Count == 0)
                        {
                            hplVisaoProduto.Text = "Inserir Visão do Produto";
                            hplVisaoProduto.NavigateUrl = "~/InserirVisaoProduto.aspx?codigo=" + codigo;
                        }
                        else
                        {
                            hplVisaoProduto.Text = "Visualizar Visão do Produto";
                            hplVisaoProduto.NavigateUrl = "~/VisualizarVisaoProduto.aspx?codigo=" + codigo;
                        }

                        hplEpoca.NavigateUrl = "~/InserirEpoca.aspx?codigo=" + codigo;

                        grvEquipe.DataSource = entidade.DEEquipes;
                        grvEquipe.DataBind();

                        grvEpoca.DataSource = entidade.DEEpocas;
                        grvEpoca.DataBind();
                    }
                }
            }
        }

        private void carregarEquipe()
        {
            if (Request.QueryString["codigo"] == null)
                Util.showMessage(this, "Projeto não encontrado.", "ConsultarProjetos.aspx");
            else
            {
                int codigo = int.Parse(Request.QueryString["codigo"]);
                using (DCCursoDataContext banco = new DCCursoDataContext())
                {
                    var query = from userEquipe in banco.DEEquipes
                                where userEquipe.CodigoProjeto == codigo
                                select userEquipe;

                    grvEquipe.DataSource = query.ToList();
                    grvEquipe.DataBind();
                }
            }
        }

        private void carregarEpoca()
        {
            if (Request.QueryString["codigo"] == null)
                Util.showMessage(this, "Projeto não encontrado.", "ConsultarProjetos.aspx");
            else
            {
                int codigo = int.Parse(Request.QueryString["codigo"]);
                using (DCCursoDataContext banco = new DCCursoDataContext())
                {
                    var query = from userEpoca in banco.DEEpocas
                                where userEpoca.CodigoProjeto == codigo
                                select userEpoca;

                    grvEpoca.DataSource = query.ToList();
                    grvEpoca.DataBind();
                }
            }
        }

        private void carregarUsuarios()
        {
            using (DCCursoDataContext banco = new DCCursoDataContext())
            {
                var query = from user in banco.DEAlunos
                            orderby user.Nome
                            select user;
                //SELECT * FROM USUARIOS ORDERBY NOME

                List<DEAluno> todosUsuarios = query.ToList();
                DEAluno userSelecione = new DEAluno();
                userSelecione.Nome = "Selecione...";
                userSelecione.Codigo = 0;

                todosUsuarios.Insert(0, userSelecione);

                ddlUsuario.DataSource = todosUsuarios;
                ddlUsuario.DataBind();
            }
        }

        protected void btnAdicionarUsuario_Click(object sender, ImageClickEventArgs e)
        {
            try
            {
                if (Request.QueryString["codigo"] == null)
                    Util.showMessage(this, "Projeto não encontrado.", "ConsultarProjetos.aspx");
                else
                {
                    int codigoProjeto = int.Parse(Request.QueryString["codigo"]);
                    int codigoUsuario = int.Parse(ddlUsuario.SelectedValue);

                    using (DCCursoDataContext banco = new DCCursoDataContext())
                    {
                        DEEquipe entidade = new DEEquipe();
                        entidade.CodigoProjeto = codigoProjeto;
                        entidade.CodigoAluno = codigoUsuario;
                        entidade.Ativo = true;

                        banco.DEEquipes.InsertOnSubmit(entidade);
                        banco.SubmitChanges();
                    }
                    carregarEquipe();
                }
            }
            catch (Exception)
            {
                Util.showMessage(this, "Houve um erro ao adicionar usuário.");
            }
        }

        protected void btnGerarSprint_Click(object sender, EventArgs e)
        {
            try
            {
                if (Request.QueryString["codigo"] == null)
                    Util.showMessage(this, "Projeto não encontrado.", "ConsultarProjetos.aspx");
                else
                {
                    int codigoProjeto = int.Parse(Request.QueryString["codigo"]);
                    using (DCCursoDataContext banco = new DCCursoDataContext())
                    {
                        short ultimoNumero = 0;
                        if (banco.DESprints.Count() > 0)
                            ultimoNumero = banco.DESprints.Where(s => s.CodigoProjeto == codigoProjeto).Max(s => s.Numero);

                        DESprint entidade = new DESprint();
                        entidade.CodigoProjeto = codigoProjeto;
                        entidade.Numero = ultimoNumero++;
                        entidade.Inicio = DateTime.Today;

                        short tamanho = banco.DEProjetos.Where(p => p.Codigo == codigoProjeto).First().TamanhoSprint.Value;
                        entidade.Fim = DateTime.Today.AddDays(tamanho * 7);

                        entidade.Capacidade = banco.DEEquipes.Where(q => q.CodigoProjeto == codigoProjeto && q.Ativo).Count() * tamanho * 4;

                        banco.DESprints.InsertOnSubmit(entidade);
                        banco.SubmitChanges();
                    }
                }
            }
            catch (Exception)
            {
                Util.showMessage(this, "Erro ao gerar sprint.");
            }
        }
    }
}